package com.study.spark.scala.dataframe

import org.apache.spark.sql.SparkSession

object DataFrameAPIDemo {

  def main(args: Array[String]): Unit = {

    val spark = SparkSession.builder()
      .appName("DataFrameDemo")
      .master("local[2]")
      .getOrCreate()
    //val path = "file:///D:\\MyCode\\BigdataWork\\bigdata-study\\study-spark\\src\\main\\scala\\com\\study\\spark\\scala\\dataframe\\db.json"
    val path = "/Users/stephen/Documents/03code/java-demo/bigdata-study/study-spark/src/main/resource/data/db.json"
    // 将json文件加载为一个DataFrame: "id":1,"name":"sssss","address":"上海市虹口区"
    val df = spark.read.format("json").load(path)
    // 输出DataFrame的schema信息
    df.printSchema()
    // 输出DataFrame的前20条记录
    df.show()

    // 查询某列所有数据
    df.select("name").show()

    // 查询某几列所有数据，并对列进行计算 select name, id+10 as id2 from table
    df.select(df.col("name"), (df.col("id") + 10).as("id2")).show()

    // 根据某一列进行过滤 select * from table where id>2
    df.filter(df.col("id") > 2).show()
    // 查询name为空的数据
    df.filter("name='' OR name='NULL'").show()
    // 查询name以x开头的数据
    df.filter("SUBSTR(name,0,1)='x'").show()

    // 排序
    df.sort(df("name").desc).show()
    // 多字段排序
    df.sort("name", "age").show()
    df.sort(df("name").asc, df("age").desc).sort()

    // 别名
    df.select(df("name").as("a_name")).show()

    // join
    val df2 = spark.read.format("json").load(path)
    df.join(df2, df.col("id")===df2.col("id"),"inner").show()

    // 根据某一列进行分组，然后再进行聚合操作 select id, count(1) from table group by id
    df.groupBy(df.col("id")).count().show()

    spark.stop()
  }
}
